﻿using B.S.InOut.Domain;
using MediatR;

namespace B.S.InOut.Read.API.Application.Command
{
    // 插入产品命令类，实现 IRequest 接口，请求返回插入记录的 ID
    public class InsertProductCommand : IRequest<int>
    {
        // 要插入的产品对象
        public ProductModel Product { get; set; }

        // 构造函数，接收产品对象
        public InsertProductCommand(ProductModel product)
        {
            Product = product;
        }
    }

    // 根据 ID 获取产品命令类，实现 IRequest 接口，请求返回产品对象
    public class GetProductByIdCommand : IRequest<ProductModel>
    {
        // 产品的 ID
        public int Id { get; set; }

        // 构造函数，接收产品 ID
        public GetProductByIdCommand(int id)
        {
            Id = id;
        }
    }

    // 获取所有产品命令类，实现 IRequest 接口，请求返回产品集合
    public class GetAllProductsCommand : IRequest<IEnumerable<ProductModel>>
    {
    }

    // 更新产品命令类，实现 IRequest 接口，请求返回受影响的行数
    public class UpdateProductCommand : IRequest<int>
    {
        // 要更新的产品对象
        public ProductModel Product { get; set; }

        // 构造函数，接收产品对象
        public UpdateProductCommand(ProductModel product)
        {
            Product = product;
        }
    }

    // 根据 ID 删除产品命令类，实现 IRequest 接口，请求返回受影响的行数
    public class DeleteProductCommand : IRequest<int>
    {
        // 产品的 ID
        public int Id { get; set; }

        // 构造函数，接收产品 ID
        public DeleteProductCommand(int id)
        {
            Id = id;
        }
    }

    /// <summary>
    /// 多条件分页查询产品命令
    /// </summary>
    public class GetProductsByConditionsCommand : IRequest<IEnumerable<ProductModel>>
    {


        /// <summary>
        /// 产品名称（可空，作为查询条件）
        /// </summary>
        public string? ProductNum { get; set; }
        /// <summary>
        /// 最低价格（可空，作为查询条件）
        /// </summary>
        public string? ProductName { get; set; }
        /// <summary>
        /// 最高价格（可空，作为查询条件）
        /// </summary>
        public string? Category { get; set; }
        /// <summary>
        /// 页码
        /// </summary>
        public int pageindex { get; set; }
        /// <summary>
        /// 每页显示的记录数
        /// </summary>
        public int pageSize { get; set; }
        public GetProductsByConditionsCommand(string? productNum, string? productName, string? category, int pageindex, int pageSize)
        {
            ProductNum = productNum;
            ProductName = productName;
            Category = category;
            this.pageindex = pageindex;
            this.pageSize = pageSize;

        }

        /// <summary>
        /// 批量删除产品命令
        /// </summary>
        public class DeleteProductsCommand : IRequest<int>
        {
            /// <summary>
            /// 要删除的产品 ID 列表
            /// </summary>
            public IEnumerable<int> ProductIds { get; set; }

            /// <summary>
            /// 构造函数，初始化要删除的产品 ID 列表
            /// </summary>
            /// <param name="productIds">要删除的产品 ID 列表</param>
            public DeleteProductsCommand(IEnumerable<int> productIds)
            {
                ProductIds = productIds;
            }


           
        }
        /// <summary>
        /// 批量查询产品数据的命令
        /// </summary>
        public class GetProductModelsByIdsCommand : IRequest<IEnumerable<ProductModel>>
        {
            public List<int> ProductIds { get; set; }

            public GetProductModelsByIdsCommand(List<int> productIds)
            {
                ProductIds = productIds;
            }
        }

    }
}
